package mysql8学习.高级.第10章_索引优化与查询优化;

/**
 * 12.2 COUNT(*)与COUNT(具体字段)效率
 *
 *  COUNT(*)和COUNT(1)本质上并没有区别
 * 如果是MyISAM存储引擎,    统计数据表的行数只需要 O(1)的复杂度
 *     ●因为每张MyISAM的数据表都有一个meta信息存储了row_count值
 * 如果是InnoDB存储引擎,    统计数据表的行数只需要 O(n)的复杂度
 *     ●因为InnoDB支持事务,采用行级锁和MVCC机制，所以无法像MyISAM一样
 *     维护一个row_count变量，因此需要采用扫描全表，是a(n)的复杂度,进行循环+计数的方式来完成统计。
 *
 * ☆ 在InnoDB引擎中，如果采用COUNT(具体字段)来统计数据行数,要尽量采用二级索引。
 *    因为主键采用的索引是聚簇索引，聚簇索引包含的信息多,明显会大于二级索引(非聚簇索引)。
 * ☆ 对于COUNT(*)和COUNT(1)来说，它们不需要查找具体的行，只是统计行数，
 *    系统会自动采用占用空间更小的二级索引来进行统计。
 * ☆ 如果有多个二级索引，会使用key_len（实际使用到的索引长度）小的二级索引进行扫描。
 *    当没有二级索引的时候，才会采用主键索引来进行统计。
 *
 */
public class J3_SELECT优化 {
}
